<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of clienteClass
 *
 * @author USUARIO
 */
class clienteClass extends utilClass{


     /*Este metodo devuelve el criteria*/
    public function listadoClientes($razonSocial="",$ruc="",$telefono="",$estado="")
    {
        $criteria = new Criteria();
        if($razonSocial!="")
        {
           $criteria->add(ClientePeer::RAZON_SOCIAL,'%'.$razonSocial.'%',  Criteria::LIKE);
        }
        if($ruc!="")
        {
           $criteria->add(ClientePeer::RUC,'%'.$ruc.'%',  Criteria::LIKE);
        }
        if($telefono!="")
        {
           $criteria->add(ClientePeer::TELEFONO,'%'.$telefono.'%',  Criteria::LIKE);
        }
        if($estado!="none")
        {
           $criteria->add(ClientePeer::ESTADO,'%'.$estado.'%',  Criteria::LIKE);
        }
        return $criteria;
    }
    
    
    public function ingresarCliente($parametros) 
    {
        $arrayRespuesta =  array("success"=>false,"mensaje"=>"Error al grabar Detalle","objecto"=>null,"code"=>602);
        try 
        {
            
            $sessionName = "s_clientesInfoBancaria";
            $coneccion   = Propel::getConnection();
            $coneccion->beginTransaction();
            $cliente = new Cliente();
            $cliente->setRazonSocial($parametros['razonSocial']);
            $cliente->setRuc($parametros['ruc']);
            if($parametros['cuenta']=="on")
            {
               $cliente->setCuentaExtranjera(1);   
            }            
            $cliente->setTelefono($parametros['telefono']);
            $cliente->setDireccion($parametros['direccion']);
            $cliente->setDiasPaga($parametros['diasPaga']);
            $cliente->setRegimenId($parametros['regimenId']);
            $cliente->setNombreContacto($parametros['nombreContacto']);
            $cliente->setEmailContacto($parametros['emailContacto']);
            $cliente->setTelefonoContacto($parametros['telefonoContacto']);
            $cliente->setNombreContactoAux($parametros['nombreContactoAux']);
            $cliente->setEmailContactoAux($parametros['emailContactoAux']);
            $cliente->setTelefonoContactoAux($parametros['telefonoContactoAux']);
            $cliente->setCuentaDetraccion($parametros['cuentaDetraccion']);
            $cliente->setObservaciones($parametros['observaciones']);
            $cliente->setEstado(1);
            $cliente->save();     
            $respuestaDetalle = $this->ingresarDetalleInformacionBancaria($sessionName, 1, $cliente->getId());
            if($respuestaDetalle['success'])
            {
                $coneccion->commit(); 
                $detalleCuentasUsuario   =  sfContext::getInstance()->getUser()->getAttribute('s_dettaleCuentaUsuario',null);   
                if($detalleCuentasUsuario!=null)
                {  
                     foreach($detalleCuentasUsuario as $row)
                     {                          
                        $detalleCuentaUsuario= new DetalleCuentaUsuario();
                        $detalleCuentaUsuario->setNombre  ( $row['nombre'] );
                        $detalleCuentaUsuario->setEmail   ( $row['correo'] );
                        $detalleCuentaUsuario->setPassword( $row['password'] );
                        $detalleCuentaUsuario->setEstado(1);
                        $detalleCuentaUsuario->setClienteId($cliente->getId());
                        $detalleCuentaUsuario->save();                          
                     }                       
                     sfContext::getInstance()->getUser()->setAttribute('s_dettaleCuentaUsuario', null);
                }

                $arrayRespuesta['success'] = true;                       
                $arrayRespuesta['mensaje']  = "Exito";

            }
            else
            {
                $arrayRespuesta['mensaje'] = $respuestaDetalle['mensaje'];
                $coneccion->rollBack();
            }
            Propel::close();
        }
        catch (Exception $e)
        {
            $coneccion->rollBack();
            Propel::close();
            $arrayRespuesta['mensaje'] = $e->getMessage();
            $arrayRespuesta['code']    = 601;
            return $arrayRespuesta;
        }
        return $arrayRespuesta;
    }
    
    /*Este metodo solo obtiene el Bean Cliente*/
    public function getCliente($idCliente,$tipoBusqueda="id")
    {
        $clienteBean = null;
        if($tipoBusqueda=="id")
        {
              $clienteBean = ClientePeer::retrieveByPK($idCliente);
        }
        return $clienteBean;
    }
    
    public function deleteCliente($idCliente)
    {
        $clienteBean = ClientePeer::retrieveByPK($idCliente);
        if(is_object($clienteBean))
        {
            $criteria = new Criteria();
            $criteria->add(InformacionBancariaPeer::ID_RELACION,$idCliente);
            $criteria->add(InformacionBancariaPeer::ID_TABLA,1);
            InformacionBancariaPeer::doDelete($criteria);            
            $criteria->clear();
            $criteria->add(DetalleCuentaUsuarioPeer::CLIENTE_ID, $idCliente);
            DetalleCuentaUsuarioPeer::doDelete($criteria);
            $clienteBean->delete(); 
            return true;
        }
        return false;
    }
    
    
    /*Este metodo obtiene el Bean Cliente y ademas crea una session de detalle del cliente(
     * informacion bancaria), para asi poder trabajar el modulo de edicion del cliente
     */
    public function obtenerCliente($idCliente)
    {
        $arrayRespuesta =  array("success"=>false,"mensaje"=>"Cliente no encontrado","objecto"=>null,"code"=>601);
        $sessionName     = "s_editClientesInfoBancaria";
        $sessionName2    = "s_editCuentaUsuario";
        $sessionNameEliminar = "s_eliminarEditCuentaUsuario";

        /* Obtengo el Cliente */
        $clienteBean = ClientePeer::retrieveByPK($idCliente);
        if(is_object($clienteBean))
        {
            /*Obtengo la lista de informacion bancaria*/
            $criteria = new Criteria();
            /*1= TABLA CLIENTE*/
            $criteria->add(InformacionBancariaPeer::ID_TABLA, 1);
            $criteria->add(InformacionBancariaPeer::ID_RELACION, $idCliente);
            $lista  = InformacionBancariaPeer::doSelect($criteria);
            /* Borro la session, en caso de que halla estado creado antes*/
            sfContext::getInstance()->getUser()->setAttribute($sessionName,null);
            sfContext::getInstance()->getUser()->setAttribute($sessionName2,null);
            sfContext::getInstance()->getUser()->setAttribute($sessionNameEliminar,null);
            
            /*Creo la session para la lista de edicion*/ 
            if(count($lista)>0)
            {
                $servicioAjax = new ajaxClass();
                foreach($lista as $row)
                {                          
                     /*Aca implemetar logica de moneda*/
                     /***********/
                    
                     /**/
                     if($row->getMonedaId()==1){$moneda="soles";}
                     if($row->getMonedaId()==2){$moneda="dolares";}
                     
                     $arrayParametros = array("nombreBanco"=>$row->getNombreBanco(),
                                              "cuentaBanco"=>$row->getCuenta(),
                                              "moneda" => $moneda,
                                              "id" => $row->getId()
                                              );
                     $servicioAjax->agregarInformacionBancariaEdit($sessionName, $arrayParametros);
                }  
            }
                 $criteria= new Criteria();
            $criteria->add(DetalleCuentaUsuarioPeer::CLIENTE_ID,$idCliente);
            $listaCuenta=DetalleCuentaUsuarioPeer::doSelect($criteria);
            sfContext::getInstance()->getUser()->setAttribute($sessionName2,null);

                 if(count($listaCuenta)>0)
            {

                foreach($listaCuenta as $row)
                {

                     $arrayParametros = array("nombre"=>$row->getNombre(),
                                              "correo"=>$row->getEmail(),
                                              "password"=>$row->getPassword(),
                                              "id" => $row->getId()
                                              );
                    $this->agregarCuentaUsuarioEdit($sessionName2,$arrayParametros);
                }
            }


            $arrayRespuesta['success'] = true;
            $arrayRespuesta['mensaje'] = "exito";
            $arrayRespuesta['objecto'] = $clienteBean;             
        }

       

       


     




        return $arrayRespuesta;
    }
    
    
    public function editarCliente($parametros) 
    {
        $arrayRespuesta =  array("success"=>false,"mensaje"=>"Error al grabar Cliente","objecto"=>null,"code"=>602);
        try 
        {            
            $sessionName = "s_editClientesInfoBancaria";
            $sessionNameEditar    = "s_editCuentaUsuario";
            $sessionNameEliminar = "s_eliminarEditCuentaUsuario";
            
            
            $coneccion   = Propel::getConnection();
            $coneccion->beginTransaction();
            
            $cliente = $this->getCliente($parametros['idCliente']);
            if(is_object($cliente))
            {
                $cliente->setRazonSocial($parametros['razonSocial']);
                $cliente->setRuc($parametros['ruc']);
                if($parametros['cuenta']=="on")
                {
                   $cliente->setCuentaExtranjera(1);   
                }
                else
                {
                    $cliente->setCuentaExtranjera(null);   
                }
                $cliente->setTelefono($parametros['telefono']);
                $cliente->setDireccion($parametros['direccion']);
                $cliente->setDiasPaga($parametros['diasPaga']);
                $cliente->setRegimenId($parametros['regimenId']);
                $cliente->setNombreContacto($parametros['nombreContacto']);
                $cliente->setEmailContacto($parametros['emailContacto']);
                $cliente->setTelefonoContacto($parametros['telefonoContacto']);
                $cliente->setNombreContactoAux($parametros['nombreContactoAux']);
                $cliente->setEmailContactoAux($parametros['emailContactoAux']);
                $cliente->setTelefonoContactoAux($parametros['telefonoContactoAux']);
                $cliente->setCuentaDetraccion($parametros['cuentaDetraccion']);
                $cliente->setObservaciones($parametros['observaciones']);
                $cliente->setEstado($parametros['estado']);
                $cliente->save();               
                
                /*con esto actualizo la informacion de los detalles en el modulo de edicion*/
                $respuestaDetalle  = $this->editarDetalleInfomacionBancaria($sessionName, 1, $cliente->getId());
                $respuestaEliminar = $this->eliminarDetalleInfomacionBancaria("s_eliminarInformacionBancariaCliente", 1, $cliente->getId());

                $respuestaDetalleCliente         = $this->editarDetalleCuentaUsuario($sessionNameEditar, $cliente->getId());
                $respuestaDetalleClienteEliminar = $this->eliminarDetalleCuentaUsuario($sessionNameEliminar);


                if($respuestaDetalle['success'])
                {
                  $coneccion->commit(); 
                  $arrayRespuesta['success'] = true;
                  $arrayRespuesta['mensaje'] = "exito";
                  $arrayRespuesta['objecto'] = $cliente;   
                }
                else
                {
                    $arrayRespuesta['mensaje'] = $respuestaDetalle['mensaje'];                  
                } 
                    Propel::close();

            }               
                              
        }
        catch (Exception $e)
        {
            $coneccion->rollBack();
            Propel::close();
            $arrayRespuesta['mensaje'] = $e->getMessage();
            $arrayRespuesta['code']    = 601;
            return $arrayRespuesta;
        }
        return $arrayRespuesta;
    }

     public function agregarCuentaUsuarioEdit($nombreSession,$arrayParametros)
    {

        $nombre    = $arrayParametros['nombre'];
        $correo    = $arrayParametros['correo'];
        $password  = $arrayParametros['password'];
       $id=     $arrayParametros['id'];

        if($nombre!="" && $correo!="" && $password!="")
        {

             $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
             $newArray = array("id"=>$id,"nombre"=>$nombre,"correo"=>$correo,"password"=>$password);
             $list[]   = $newArray;
             sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        }
    }
    
    public function agregarCuentaUsuario($nombreSession,$arrayParametros)
    {

        $nombre    = $arrayParametros['nombre'];
        $correo    = $arrayParametros['correo'];
        $password  = $arrayParametros['password'];

        if($nombre!="" && $correo!="" && $password!="")
        {

             $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
             $id   = 1;
             $repetido = false;
             if($list!=null)
             {
                 $result   = array_reverse($list);
                 $id       = $result[0]['id']+1;
             }
             if($repetido==false)
             {
                 $newArray = array("id"=>$id,"nombre"=>$nombre,"correo"=>$correo,"password"=>$password);
                 $list[]   = $newArray;
             }
             sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        }
     }
    
    public function editarCuentaUsuario($nombreSession,$arrayParametros)
    {
        $nombre    = $arrayParametros['nombre'];
        $correo    = $arrayParametros['correo'];
        $password  = $arrayParametros['password'];
        
        $list           =  sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $clave          = -1; 
        if($list!=null)
        {           
              while ($row = current($list))
              {
                 if($row['id']==$arrayParametros["idDetalle"])
                 {
                    $array = $row;                  
                    $clave = key($list);
                    break;
                 }
                 next($list);
              }

              if($clave!=-1)
              {                 
                  $list[$clave]  =  array("id"=>$array['id'],"nombre"=>$nombre,"correo"=>$correo,"password"=>$password);
                  sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
                  return true;
              }             
        }
        return false;
    }
    
    
    public function elminarCuentaUsuario($nombreSession,$id)
    {
       
       $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
       $clave          = -1; 
       if($list!=null)
       {         
            while ($row = current($list))
            {
                if ($row['id']==$id)
                {
                    $clave =  key($list);
                    break;
                }              
                next($list);
            }                
            if($clave!=-1)
            {
                unset($list[$clave]);
                if(count($list)==0)
                {
                    sfContext::getInstance()->getUser()->setAttribute($nombreSession,null);     
                }
                else
                {
                   sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);    
                }                
               return true;  
            }                     
       }
       return false;
    }
    
    public function elminarCuentaUsuarioEditar($nombreSession,$id)
    {
        $list = sfContext::getInstance()->getUser()->getAttribute($nombreSession,null);
        $newArray = array("id"=>$id);
        $list[]   = $newArray;
        sfContext::getInstance()->getUser()->setAttribute($nombreSession,$list);
        return true;
      
    }
    
    
    public function editarDetalleCuentaUsuario($sessionName,$idCliente)
    {
        $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603);  
        $detalleCuentaUsuario   =  sfContext::getInstance()->getUser()->getAttribute($sessionName,null);   
        if($detalleCuentaUsuario!=null)
        {  
             foreach($detalleCuentaUsuario as $row)
             {
                 try 
                 {
                      $detalle= DetalleCuentaUsuarioPeer::retrieveByPK($row['id']);
                      if(is_object($detalle))
                      {
                            $detalle->setNombre  ( $row['nombre'] );
                            $detalle->setEmail   ( $row['correo'] );
                            $detalle->setPassword( $row['password'] );
                            $detalle->save();
                      }
                      /*Si no lo encuentro es por que es nuevo asi que lo agrego*/
                      else
                      {
                            $detalleCuentaUsuario= new DetalleCuentaUsuario();
                            $detalleCuentaUsuario->setNombre  ( $row['nombre'] );
                            $detalleCuentaUsuario->setEmail   ( $row['correo'] );
                            $detalleCuentaUsuario->setPassword( $row['password'] );
                            $detalleCuentaUsuario->setEstado(1);
                            $detalleCuentaUsuario->setClienteId($idCliente);
                            $detalleCuentaUsuario->save();    
                      }
                      
                        $arrayRespuesta['success'] = true;                       
                        $arrayRespuesta['mensaje']  = "Exito";
                      
                     
                 } catch (Exception $e)
                 {                      
                     
                      $arrayRespuesta['mensaje'] = $e->getMessage();
                      $arrayRespuesta['code']    = 601;
                      return $arrayRespuesta;
                 }              
             }
       }
       else
       {
                        $arrayRespuesta['success'] = true;                       
                        $arrayRespuesta['mensaje']  = "Exito (No session)";
       }
       sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
       return $arrayRespuesta;
       
    }
    
    
    public function eliminarDetalleCuentaUsuario($sessionName)
    {
        $arrayRespuesta =  array("success"=>false,"mensaje"=>"No existe detalle","objecto"=>null,"code"=>603); 
        $detalleCuentaUsuario   =  sfContext::getInstance()->getUser()->getAttribute($sessionName,null);
        if($detalleCuentaUsuario!=null)
        {  
             foreach($detalleCuentaUsuario as $row)
             {
                 try 
                 {
                      $detalle= DetalleCuentaUsuarioPeer::retrieveByPK($row['id']);
                      if(is_object($detalle))
                      {
                          
                          $detalle->delete();
                      }
                     
                 } catch (Exception $e)
                 {      
                      $arrayRespuesta['mensaje'] = $e->getMessage();
                      $arrayRespuesta['code']    = 601;
                      return $arrayRespuesta;
                 }              
             }
       }
       sfContext::getInstance()->getUser()->setAttribute($sessionName, null);
       return $arrayRespuesta;
    }
    
    
}

?>
